A virtual machine (VM) is a portion of software that, when executed on appropriate hardware, create an environment allowing the virtualization of an actual physical computer system (e.g., a server, a mainframe computer, etc.). The actual physical computer system is typically referred to as a “host machine,” and the operating system (OS) of the host machine is typically referred to as the “host operating system.” Typically, software on the host machine known as a “hypervisor” (or a “virtual machine monitor”) manages the execution of one or more virtual machines or “guests”, providing a variety of functions such as virtualizing and allocating resources, context switching among virtual machines, etc. The operating system (OS) of the virtual machine is typically referred to as the “guest operating system” (or “guest OS”).
In a virtualized environment, physical devices, such as network devices or video cards, can be made available to guests by the hypervisor using a process known as device assignment. Physical Peripheral Component Interconnect (PCI) adapters are a collection of physical devices that may include one or more interconnected devices, such as bridges and switch ports, as well as one or more endpoint functions such as a Network Interface Controller (NIC), Host Bus Adapter (HBA), Universal Serial Bus (USB) port, Graphics Processing Unit (GPU), etc. Multiple PCI devices may be packaged together into a physical device on a PCI bus, referred to as a “multi-function” device.